#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include "packunpack.h"
#include <QLabel>
#include <QSerialPort>
#include "formsetuart.h"
#include <QMutex>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

    void uiInit();

protected:
    bool eventFilter(QObject* obj,QEvent* event);

private slots:
    void menuSetUART();
    void initSerial(QString port_num,int baud_rate,int data_bits,int stop_bits,int parity,bool is_opened);
    void readSerial();   //读取串口数据
    void writeSerial(QByteArray data);  //向串口写入数据
    void recPRBType(QString type,QByteArray data);

    void menuSaveData();
    void menuAbout();
    void menuQuit();

private:
    Ui::MainWindow *ui;
    PackUnpack* m_pack_unpack;
    QLabel* m_first_status_label;

    uchar** m_pack_after_unpack_array;  //定义一个二维数组接受解包后的数据缓存

    QSerialPort* m_serial_port;
    int m_pack_head;  //当前需要处理的缓冲包的序号
    int m_pack_tail;  //最后处理的缓冲包的序号

    QString m_prb_type;  //体温探头类型

    QByteArray m_rx_data; //接收数据暂存

    QList<uchar> m_pack_after_unpack_list;  //解包后的数据
    QMutex m_mutex;

private:
    void procUARTData();
    void dealRcvPackData();
    bool unpackRcvData(uchar data);
    void analyzeTempData(uchar pack_after_unpack[]);

};
#endif // MAINWINDOW_H
